<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // Promise :  es6 内置的类(构造函数)  作用 : 处理异步

    // promise内置属性  PromiseState
    //  pending    默认状态
    //  fulfilled  成功状态
    //  rejected   失败状态

    // 实例化promise对象 会接收一个参数 这个参数是回调函数 函数有两个形参
    // 异步任务成功 调用resolve  异步任务失败 调用reject
    let p = new Promise((resolve, reject) => {
      resolve(1) // fulfilled
      // reject('err') // rejected 
    })
    console.log(p); // 输出的是promise对象  第一种状态 pending  也是默认状态


    // 异步任务成功或者失败后 并没有结束 还需要对成功/失败后的需求 做实现
    // 每个promise对象都有then方法  then里面有两个参数都是函数(两个回调函数)
    // 第一个函数 是对成功时的回调  value用来接收上面传递下来的参数 
    // 第二个函数 是对失败时的回调   reason同上

    // p.then((value) => {
    //   console.log('成功',value)
    // }, (reason) => {
    //   console.log('.then第二个参数',reason);
    // })


    // .then和 .catch方法(也可以捕捉到错误)
    // p.then((value) => {
    //   console.log('成功',value)
    // }).catch(err => {
    //   console.log('.catch方法',err);
    // })


    // .then 的返回值

    // 1. 没有返回值  (没有return) 
    // let thenRes = p.then((value) => {
    //   console.log('成功',value)
    // })
    // console.log(thenRes);
    // 得到的是成功状态的promise对象    PromiseResult 的值为undefined


    // 2.有返回值
    // let thenRes = p.then((value) => {
    //   console.log('成功',value)
    //   return 'hello'
    // })
    // console.log(thenRes);
    // 得到的是成功状态的promise对象    PromiseResult 的值为返回值


    // 3. 返回值是 promise对象
    // let thenRes = p.then((value) => {
    //   console.log('成功',value)
    //   return new Promise((res,rej)=>{
    //     res('返回的成功值')
    //   })
    // })
    // console.log(thenRes);
    // 返还的这个promise对象原封不动的返还出来



    // 总结：无论如何 ，promise的then方法 都会返还一个promise对象。每个promise对象都会有一个then方法.then 是可以无限链式调用


    let p2 = p.then(res => {
      return 123;
    })
    let p3 = p2.then(res => {
      console.log(res);
    })
    p3.then(res => {
      console.log(res);
    })




  </script>
</body>

</html>